home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 001-025 / scopedisk8 / superlib / libsrc.arc / wildcmp.c < prev    next >
C/C++ Source or Header  |  1987-12-22  |  788b  |  60 lines

  1.  
  2. /*
  3.  * Compare a wild card name with a normal name
  4.  */
  5.  
  6. #defineMAXB   8
  7.  
  8. wildcmp(wild, name)
  9. char *wild, *name;
  10. {
  11.     register char *w = wild;
  12.     register char *n = name;
  13.     char *back[MAXB][2];
  14.     intbi = 0;
  15.  
  16.     while (*n || *w) {
  17. switch (*w) {
  18. case '*':
  19.     if (bi == MAXB) {
  20. puts ("Too many levels of '*'");
  21. return (0);
  22.     }
  23.     back[bi][0]= w;
  24.     back[bi][1]= n;
  25.     ++bi;
  26.     ++w;
  27.     continue;
  28. goback:
  29.     --bi;
  30.     while (bi >= 0 && *back[bi][1] == '\0')
  31. --bi;
  32.     if (bi < 0)
  33. return (0);
  34.     w =back[bi][0] + 1;
  35.     n =++back[bi][1];
  36.     ++bi;
  37.     continue;
  38. case '?':
  39.     if (!*n) {
  40. if (bi)
  41.     goto goback;
  42. return (0);
  43.     }
  44.     break;
  45. default:
  46.     if (*n != *w) {
  47. if (bi)
  48.     goto goback;
  49. return (0);
  50.     }
  51.     break;
  52. }
  53. if (*n) ++n;
  54. if (*w) ++w;
  55.     }
  56.     return (1);
  57. }
  58.  
  59.  
  60.